<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>6. Arrays und Hashs &mdash; PowerShell fuer Systemintegratoren</title>
    
    <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    './',
        VERSION:     '1.0',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <script type="text/javascript" src="_static/translations.js"></script>
    <link rel="top" title="PowerShell fuer Systemintegratoren" href="index.html" />
    <link rel="next" title="7. Bedingungen" href="powershell_bedingung.html" />
    <link rel="prev" title="5. Operatoren" href="powershell_operator.html" /> 
  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="Allgemeiner Index"
             accesskey="I">Index</a></li>
        <li class="right" >
          <a href="powershell_bedingung.html" title="7. Bedingungen"
             accesskey="N">weiter</a> |</li>
        <li class="right" >
          <a href="powershell_operator.html" title="5. Operatoren"
             accesskey="P">zurück</a> |</li>
        <li><a href="index.html">PS4SYS</a> &raquo;</li> 
      </ul>
    </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="index.html">
              <img class="logo" src="_static/PowerShell_icon_small.png" alt="Logo"/>
            </a></p>
  <h3><a href="index.html">Inhalt</a></h3>
  <ul>
<li><a class="reference internal" href="#">6. Arrays und Hashs</a><ul>
<li><a class="reference internal" href="#erzeugen-eigener-arrays">6.1. Erzeugen eigener Arrays</a></li>
<li><a class="reference internal" href="#arrays-mit-einem-oder-keinem-element">6.2. Arrays mit einem oder keinem Element</a></li>
<li><a class="reference internal" href="#ansprechen-von-array-elementen">6.3. Ansprechen von Array-Elementen</a></li>
<li><a class="reference internal" href="#ansprechen-mehrerer-elemente-eines-arrays">6.4. Ansprechen mehrerer Elemente eines Arrays</a></li>
<li><a class="reference internal" href="#hinzufugen-und-entfernen-von-elementen">6.5. Hinzufügen und Entfernen von Elementen</a></li>
<li><a class="reference internal" href="#kopieren-von-arrays">6.6. Kopieren von Arrays</a></li>
<li><a class="reference internal" href="#typisierte-arrays">6.7. Typisierte Arrays</a></li>
<li><a class="reference internal" href="#zusammenfassung">6.8. Zusammenfassung</a></li>
<li><a class="reference internal" href="#hash-im-gegensatz-zu-arrays">6.9. Hash im Gegensatz zu Arrays</a><ul>
<li><a class="reference internal" href="#vorteile-der-hashtable-im-vergleich-zum-array">6.9.1. Vorteile der Hashtable im Vergleich zum Array</a></li>
</ul>
</li>
</ul>
</li>
</ul>

  <h4>Vorheriges Thema</h4>
  <p class="topless"><a href="powershell_operator.html"
                        title="vorheriges Kapitel">5. Operatoren</a></p>
  <h4>Nächstes Thema</h4>
  <p class="topless"><a href="powershell_bedingung.html"
                        title="nächstes Kapitel">7. Bedingungen</a></p>
  <h3>Diese Seite</h3>
  <ul class="this-page-menu">
    <li><a href="_sources/powershell_arrays.txt"
           rel="nofollow">Quelltext anzeigen</a></li>
  </ul>
<div id="searchbox" style="display: none">
  <h3>Schnellsuche</h3>
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Los" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Geben Sie Suchbegriffe oder einen Modul-, Klassen- oder Funktionsnamen ein.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="arrays-und-hashs">
<span id="index-0"></span><h1>6. Arrays und Hashs<a class="headerlink" href="#arrays-und-hashs" title="Permalink zu dieser Überschrift">¶</a></h1>
<div class="topic">
<p class="topic-title first">Überblick</p>
<ul class="simple">
<li>Erzeugen von Arrays und Hash</li>
<li>Ansprechen von Arrays und Hash</li>
<li>Durchlaufen von Arrays und HAsh</li>
</ul>
</div>
<p>Arrays erweitern den Grundgedanken einer einfachen Variable um den Aspekt des Speicherns mehrerer Werte unter einem Variablenamen.</p>
<p>Letzlich gibt <strong>Powershell</strong> bei mehrzeiligen Ausgaben immer einen Array zurück.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="c">#die Ausgabe ist kein mehrzeiliger String, sondern ein Array von Strings</span>
<span class="c">#jede Zeile ist ein Element des Arrays</span>
<span class="nv">$a</span> <span class="o">=</span> ipconfig
<span class="nv">$a</span>
Windows IP Configuration
Ethernet adapter LAN Connection
Media state
. . . . . . . . . . . : Medium disconnected

Connection-specific DNS Suffix:
Connection location IPv6 Address  . : fe80::6093:8889.....
IPv4 address  . . . . . . . . . . . : 192.168.1.35
Subnet Mask . . . . . . . . . . . . : 255.255.255.0
Standard Gateway . . . . . . . . . . : 192.168.1.1
</pre></div>
</div>
<img alt="_images/array_ipconfig.png" src="_images/array_ipconfig.png" />
<p>Da in diesem Beispiel lediglich Strings gespeichetr werden, bleibt eine Weiterverarbeitung nur mit Hilfe von Stringverarbeitung möglich.</p>
<p>Echte Powershell-Cmdlets reichen jedoch Objekte in die Arays zurück, die sich deutlich einfacher und eleganter bearbeiten lassen. Näheres dazu später.</p>
<div class="section" id="erzeugen-eigener-arrays">
<span id="index-1"></span><h2>6.1. Erzeugen eigener Arrays<a class="headerlink" href="#erzeugen-eigener-arrays" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Wenn man Arrays nicht als Ergebnis erhält, so kann man sich recht einfach Arrays selbst erzeugen.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="c">#verschiedene Methoden, um Werte in Arrays zu definieren</span>
<span class="nv">$array</span> <span class="o">=</span> 1,2,3,4
<span class="nv">$array</span> <span class="o">=</span> 1..4
<span class="nv">$array</span>
1
2
3
4


PS C:<span class="se">\&gt;</span> <span class="nv">$array</span> <span class="o">=</span> <span class="s2">&quot;Hello&quot;</span>, <span class="s2">&quot;World&quot;</span>, 1, 2, <span class="o">(</span>Get-Date<span class="o">)</span>
PS C:<span class="se">\&gt;</span> <span class="nv">$array</span>
Hello
World
1
2

Montag, 16. August 2010 22:18:17
</pre></div>
</div>
</div>
<div class="section" id="arrays-mit-einem-oder-keinem-element">
<h2>6.2. Arrays mit einem oder keinem Element<a class="headerlink" href="#arrays-mit-einem-oder-keinem-element" title="Permalink zu dieser Überschrift">¶</a></h2>
<div class="highlight-sh"><div class="highlight"><pre><span class="nv">$array</span> <span class="o">=</span> ,1
<span class="nv">$array</span>.Length
1

<span class="nv">$array</span> <span class="o">=</span> @<span class="o">()</span>
<span class="nv">$array</span>.Length
0
<span class="nv">$array</span> <span class="o">=</span> @<span class="o">(</span>12<span class="o">)</span>
<span class="nv">$array</span>
12
<span class="nv">$array</span> <span class="o">=</span> @<span class="o">(</span>1,2,3,<span class="s2">&quot;Hello&quot;</span><span class="o">)</span>
<span class="nv">$array</span>
</pre></div>
</div>
</div>
<div class="section" id="ansprechen-von-array-elementen">
<h2>6.3. Ansprechen von Array-Elementen<a class="headerlink" href="#ansprechen-von-array-elementen" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Die Inhalte des Arrays werden über den Index angesprochen</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="c"># Create your own new array:</span>
<span class="nv">$array</span> <span class="o">=</span> -5..12
<span class="c"># Access the first element:</span>
<span class="nv">$array</span><span class="o">[</span>0<span class="o">]</span>
-5
<span class="c"># Access the last element (several methods):</span>
<span class="nv">$array</span><span class="o">[</span>-1<span class="o">]</span>
12
<span class="nv">$array</span><span class="o">[</span><span class="nv">$array</span>.Count-1<span class="o">]</span>
12
<span class="nv">$array</span><span class="o">[</span><span class="nv">$array</span>.length-1<span class="o">]</span>
12
<span class="c"># Access a dynamically generated array that is not stored in a variable:</span>
<span class="o">(</span>-5..12<span class="o">)[</span>2<span class="o">]</span>
-3
</pre></div>
</div>
</div>
<div class="section" id="ansprechen-mehrerer-elemente-eines-arrays">
<span id="index-2"></span><h2>6.4. Ansprechen mehrerer Elemente eines Arrays<a class="headerlink" href="#ansprechen-mehrerer-elemente-eines-arrays" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Man kann mehrere Elemente eines Arrays durch eine kommaseparierte Liste von Indexwerten ansprechen. Das Ergebnis ist wiederum ein Array, der nur aus diesen Werten besteht.</p>
<div class="highlight-sh"><div class="highlight"><pre>    PS C:<span class="se">\&gt;</span> <span class="nv">$list</span> <span class="o">=</span> Dir
    PS C:<span class="se">\&gt;</span> <span class="nv">$list</span><span class="o">[</span>1,4,7,12<span class="o">]</span>

Verzeichnis: C:<span class="se">\</span>

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        20.07.2010     23:00            data
d----        31.07.2009     22:40            Dokumente und Einstellungen
d----        18.08.2009     20:54            inetpub
d----        14.07.2009     04:37            PerfLogs
</pre></div>
</div>
</div>
<div class="section" id="hinzufugen-und-entfernen-von-elementen">
<span id="index-3"></span><h2>6.5. Hinzufügen und Entfernen von Elementen<a class="headerlink" href="#hinzufugen-und-entfernen-von-elementen" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Da <strong>Powershell</strong> die Länge von Arrays nicht Ã¤ndern kann, muss beim Hinzufügen und Entfernen jeweils ein neuer Array angelegt werden und die Werte des alten Arrays in den neuen kopiert werden.</p>
<p>Das Hinzufügen erfolgt mit Hilfe des <em>+=</em> - Operators.</p>
<div class="highlight-sh"><div class="highlight"><pre>PS C:<span class="se">\&gt;</span> <span class="nv">$array</span> <span class="o">=</span> 1..5
PS C:<span class="se">\&gt;</span> <span class="nv">$Array</span> +<span class="o">=</span> 6
PS C:<span class="se">\&gt;</span> <span class="nv">$array</span>
1
2
3
4
5
6
</pre></div>
</div>
<p>Da <strong>Powershell</strong> aus Arrays keine Werte entfernen kann, hilft nur ein (umständliches) Umkopieren des Alten in einen neuen Array.</p>
<div class="highlight-sh"><div class="highlight"><pre>PS C:<span class="se">\&gt;</span> <span class="nv">$array</span> <span class="o">=</span> 1..5
PS C:<span class="se">\&gt;</span> <span class="nv">$Array</span> +<span class="o">=</span> 6
PS C:<span class="se">\&gt;</span> <span class="nv">$array</span>
1
2
3
4
5
6

PS C:<span class="se">\&gt;</span> <span class="nv">$array</span> <span class="o">=</span> <span class="nv">$array</span><span class="o">[</span>1..2<span class="o">]</span> + <span class="nv">$array</span><span class="o">[</span>4..5<span class="o">]</span>
PS C:<span class="se">\&gt;</span> <span class="nv">$array</span>
2
3
5
6
</pre></div>
</div>
</div>
<div class="section" id="kopieren-von-arrays">
<span id="index-4"></span><h2>6.6. Kopieren von Arrays<a class="headerlink" href="#kopieren-von-arrays" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Das Kopieren von Arrays erfolgt durch Zuweisen der alten Arrayvariable an eine neue Arrayvariable. Dabei muss jedoch beachtet werden, dass nicht die Werte koiert werden, sondern lediglich die Referenzvariablen. Dies kann gewünschte/unerwünschte Nebeneffekte besitzen.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="nv">$array1</span> <span class="o">=</span> 1,2,3
<span class="nv">$array2</span> <span class="o">=</span> <span class="nv">$array1</span>
<span class="nv">$array2</span><span class="o">[</span>0<span class="o">]</span> <span class="o">=</span> 99
<span class="nv">$array1</span><span class="o">[</span>0<span class="o">]</span>
                                ??
</pre></div>
</div>
<p>Um diesen Effekt nicht zu erhalten, mÃ¼ssen die Arrays mit Hilfe der <strong>clone()</strong>-Methode kopiert werden.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="nv">$array1</span> <span class="o">=</span> 1,2,3
<span class="nv">$array2</span> <span class="o">=</span> <span class="nv">$array1</span>.Clone<span class="o">()</span>
<span class="nv">$array2</span><span class="o">[</span>0<span class="o">]</span> <span class="o">=</span> 99
<span class="nv">$array1</span><span class="o">[</span>0<span class="o">]</span>
                                ??
</pre></div>
</div>
<p>Immer wenn in einer solchen Situation neue Elemente hinzugefÃ¼gt werden, wird hinter den Kulissen der gleiche Ablauf stattfinden.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="c"># Create array and store pointer to array in $array2:</span>
<span class="nv">$array1</span> <span class="o">=</span> 1,2,3
<span class="nv">$array2</span> <span class="o">=</span> <span class="nv">$array1</span>
<span class="c"># Assign a new element to $array2. A new array is created in the process and stored</span>
in <span class="nv">$array2</span>:
<span class="nv">$array2</span> +<span class="o">=</span> 4
<span class="nv">$array2</span><span class="o">[</span>0<span class="o">]=</span>99
<span class="c"># $array1 continues to point to the old array:</span>
<span class="nv">$array1</span><span class="o">[</span>0<span class="o">]</span>
1
</pre></div>
</div>
</div>
<div class="section" id="typisierte-arrays">
<span id="index-5"></span><h2>6.7. Typisierte Arrays<a class="headerlink" href="#typisierte-arrays" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Ã„hnlich wie bei Variablen kÃ¶nnen Arrays typisiert werden. Sie kÃ¶nnen dann nur noch bestimmte Datentypen aufnehmen.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="c"># Create a strongly typed array that can store whole numbers only:</span>
<span class="o">[</span>int<span class="o">[]]</span><span class="nv">$array</span> <span class="o">=</span> 1,2,3
<span class="c"># Everything that can be converted into a number is allowed</span>
<span class="c"># (including strings):</span>
<span class="nv">$array</span> +<span class="o">=</span> 4
<span class="nv">$array</span> +<span class="o">=</span> 12.56
<span class="nv">$array</span> +<span class="o">=</span> <span class="s2">&quot;123&quot;</span>
<span class="c"># If a value cannot be converted into a whole number, an error</span>
<span class="c"># will be reported:</span>
<span class="nv">$array</span> +<span class="o">=</span> <span class="s2">&quot;Hello&quot;</span>
The value <span class="s2">&quot;Hello&quot;</span> cannot be converted into the <span class="nb">type</span> <span class="s2">&quot;System.Int32&quot;</span>.
Error: <span class="s2">&quot;Input string was not in a correct format.&quot;</span>
At line:1 char:6
+ <span class="nv">$array</span>  <span class="o">&lt;&lt;&lt;</span>&lt; +<span class="o">=</span> <span class="s2">&quot;Hello&quot;</span>
</pre></div>
</div>
</div>
<div class="section" id="zusammenfassung">
<h2>6.8. Zusammenfassung<a class="headerlink" href="#zusammenfassung" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Arrays can store as many separate elements as you like. Arrays assign a sequential index number to elements that always begin at 0. You create new arrays with &#64;(Element1, Element2, ...). You can also leave out &#64;() for arrays and only use the comma operator.</p>
<p>You can address single elements of an array or hash able by using square brackets. Specify either the index number (for arrays) of the desired element in the square brackets. Using this approach you can select and retrieve several elements at the same time.</p>
</div>
<div class="section" id="hash-im-gegensatz-zu-arrays">
<span id="index-6"></span><h2>6.9. Hash im Gegensatz zu Arrays<a class="headerlink" href="#hash-im-gegensatz-zu-arrays" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Hashmaps sind eine weitere Möglichkeit, Daten in einer strukturierten Form zu speichern.
Im Gegensatz zum Array verwenden diese keinen Index zur Positionierung der Daten, sondern einen frei wählbaren Schlüssel, der durch eine Hashfunktion auf eine Indexposition umgerechnet wird.</p>
<img alt="_images/Hash_table.png" src="_images/Hash_table.png" />
<div class="section" id="vorteile-der-hashtable-im-vergleich-zum-array">
<h3>6.9.1. Vorteile der Hashtable im Vergleich zum Array<a class="headerlink" href="#vorteile-der-hashtable-im-vergleich-zum-array" title="Permalink zu dieser Überschrift">¶</a></h3>
<ul class="simple">
<li>Freie Wahl des Schlüsselwertes</li>
<li>Beliebing erweiterbar (ohne die &#8220;Verwaltungskosten&#8221; des Array)</li>
<li>Schnellere Suche, da direkter Zugriff über den Schlüssel</li>
</ul>
<p><a class="reference external" href="http://powershell.com/cs/blogs/ebookv2/archive/2012/02/07/chapter-4-arrays-and-hashtables.aspx#using-hash-tables">http://powershell.com/cs/blogs/ebookv2/archive/2012/02/07/chapter-4-arrays-and-hashtables.aspx#using-hash-tables</a></p>
<p><a class="reference external" href="http://technet.microsoft.com/en-us/library/ee692803.aspx">http://technet.microsoft.com/en-us/library/ee692803.aspx</a></p>
<p><a class="reference external" href="http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/19/create-custom-objects-in-your-powershell-script.aspx">http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/19/create-custom-objects-in-your-powershell-script.aspx</a></p>
<p><a class="reference external" href="http://gallery.technet.microsoft.com/scriptcenter/925a517d-f400-4773-a79d-22ba9e91618e">http://gallery.technet.microsoft.com/scriptcenter/925a517d-f400-4773-a79d-22ba9e91618e</a></p>
</div>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="Allgemeiner Index"
             >Index</a></li>
        <li class="right" >
          <a href="powershell_bedingung.html" title="7. Bedingungen"
             >weiter</a> |</li>
        <li class="right" >
          <a href="powershell_operator.html" title="5. Operatoren"
             >zurück</a> |</li>
        <li><a href="index.html">PS4SYS</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2010, STE.
      Mit <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1 erstellt.
    </div>
  </body>
</html>